
const { createCanvas, registerFont } = require('canvas');
const sharp = require('sharp');
const fs = require('fs');
const path = require('path');

// 注册支持中文的字体
registerFont(path.join(__dirname, 'fonts', 'iconfont.ttf'), { family: 'Microsoft YaHei' }); // 加载微软雅黑字体

// 输出图片路径
const outputPath = path.join(__dirname, 'watermark.png');

// 图片尺寸
const width = 500;
const height = 250;

// 背景色和透明度
const backgroundColor = 'rgba(102, 102, 102, 0.5)';

// 文字设置
const text = '这是一段很长的中文文字，用于测试自动换行功能。当文字过多时，会自动换行以避免超出图片范围。';
const fontColor = 'white';
const fontSize = 40;
const fontFamily = 'Microsoft YaHei'; // 使用注册的字体
const lineHeight = fontSize * 1.2; // 行高
const padding = 20; // 边距

// 创建画布
const canvas = createCanvas(width, height);
const ctx = canvas.getContext('2d');

// 设置背景色
ctx.fillStyle = backgroundColor;
ctx.fillRect(0, 0, width, height);

// 设置文字样式
ctx.fillStyle = fontColor;
ctx.font = `${fontSize}px ${fontFamily}`;
ctx.textAlign = 'left';
ctx.textBaseline = 'top';

// 自动换行函数
function wrapText(context, text, x, y, maxWidth, lineHeight) {
    const words = text.split('');
    let line = '';
    let testLine;
    let metrics;

    for (let i = 0; i < words.length; i++) {
        testLine = line + words[i];
        metrics = context.measureText(testLine);
        if (metrics.width > maxWidth && i > 0) {
            context.fillText(line, x, y);
            line = words[i];
            y += lineHeight;
        } else {
            line = testLine;
        }
    }
    context.fillText(line, x, y);
}

// 绘制文字
const maxWidth = width - padding * 2; // 最大文字宽度
const startX = padding; // 文字起始 X 坐标
const startY = padding; // 文字起始 Y 坐标
wrapText(ctx, text, startX, startY, maxWidth, lineHeight);

// 将画布转换为 Buffer
const buffer = canvas.toBuffer('image/png');

// 使用 sharp 保存图片
sharp(buffer)
    .toFile(outputPath, (err) => {
        if (err) {
            console.error('保存图片时出错:', err);
        } else {
            console.log(`图片已保存到: ${outputPath}`);
        }
    });